package com.pan.admin.module.loanProduct.service;

import com.pan.admin.module.loanProduct.entity.LoanProductPlan;
import com.pan.admin.module.loanProduct.entity.qo.LoanProductPlanKeywordQO;
import com.pan.admin.module.loanProduct.entity.vo.LoanProductPlanTestVO;
import com.pan.admin.module.loanProduct.entity.vo.LoanProductPlanVO;
import com.pan.admin.module.loanProduct.enums.PlanTypeEnum;

import java.util.List;
import java.util.Map;

/**
 * 配置机构计划Service接口
 *
 * @author ts
 * @date 2023-12-27
 */
public interface LoanProductPlanService {

    /**
     * 计划
     */
    List<Map<String, Object>> listLoanProductPlan(List<Long> loanProductId, String keyword);

    /**
     * 计划(有数据权限)
     */
    List<Map<String, Object>> listLoanProductPlanWithDataScope(LoanProductPlanKeywordQO keyword);

    /**
     * 查询所有计划-业务中不允许使用
     *
     * @return 配置机构计划集合
     */
    List<LoanProductPlan> listAll();

    /**
     *  查询所有计划-业务中不允许使用（从库）
     *
     *  @return 配置机构计划集合
     */
    List<LoanProductPlan> listAllSlave();

    /**
     * 根据ID获取列表配置机构计划（有数据权限）
     *
     * @param loanProductPlan 配置机构计划主键
     * @return 配置机构计划
     */
    LoanProductPlan getByIdWithDataScope(PlanTypeEnum type, LoanProductPlan loanProductPlan);

    /**
     * 查询配置机构计划列表(有数据权限)
     *
     * @param loanProductPlanVO 配置机构计划
     * @return 配置机构计划集合
     */
    List<LoanProductPlan> listWithDataScope(PlanTypeEnum type, LoanProductPlan loanProductPlanVO);

    /**
     * 新增配置机构计划
     *
     * @param loanProductPlan 配置机构计划
     * @return 结果
     */
    int insertLoanProductPlan(PlanTypeEnum type, LoanProductPlanVO loanProductPlanVO);

    /**
     * 修改配置机构计划
     *
     * @param loanProductPlanVO 配置机构计划
     * @return 结果
     */
    int updateLoanProductPlan(PlanTypeEnum type, LoanProductPlanVO loanProductPlanVO);

    /**
     * 校验修改计划权限
     *
     * @param id 产品信息主键
     * @return 结果
     */
    void checkDataScope(PlanTypeEnum type, Long id);

    /**
     * 删除配置机构计划
     *
     * @param id 配置机构计划主键
     * @return 结果
     */
    int deleteById(PlanTypeEnum type, Long id);

    /**
     * 批量删除配置机构计划
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    int batchDeleteById(PlanTypeEnum type, Long[] ids);

    /**
     *
     *  功能描述: 根据id修改状态
     *  @author hrj
     *
     *  @param loanProductPlan
     *  @return int
     */
    int updateStatusById(PlanTypeEnum type, LoanProductPlanVO loanProductPlanVO);

    String testLoanProductPlan(PlanTypeEnum platformPlan, LoanProductPlanTestVO loanProductPlanTestVO);
}
